home *** CD-ROM | disk | FTP | other *** search
/ Aminet 2 / Aminet AMIGA CDROM (1994)(Walnut Creek)[Feb 1994][W.O. 44790-1].iso / Aminet / dev / misc / toolbox.lha / Toolbox / Test / ALL / PL5.rex.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-03-14  |  3.9 KB  |  123 lines

  1. EXPORT  {/* EXPORT */
  2.          #include "StringMem.h"   /* For 'PutString' */
  3.          #include "Idents.h"      /* For 'MakeIdent' */
  4.          #include "Positions.h"
  5.  
  6.          typedef struct { tPosition Position;
  7.                           tStringRef lexstring;
  8.                           tIdent lexid;        } tScanAttribute;
  9.          extern void ErrorAttribute ARGS((int Token, tScanAttribute * Attribute));
  10.          /* EXPORT */}
  11. GLOBAL  {/* GLOBAL */
  12.          /* #include "Memory.h" */
  13.          void ErrorAttribute ARGS((int Token, tScanAttribute * Attribute))
  14.          {}
  15.          int clevel=0;
  16.          /* GLOBAL */}
  17. LOCAL   {/* LOCAL */
  18.          char       Word [256];
  19.          int        length;
  20.          /* LOCAL */}
  21. BEGIN   {/* BEGIN */}
  22. CLOSE   {/* CLOSE */}
  23. DEFAULT {/* DEFAULT */
  24.          printf("REX-ERR:\n");
  25.          (void) putchar ((int) yyChBufferIndexReg [-1]);
  26.          /* DEFAULT */}
  27. EOF     {/* EOF */
  28.          if (clevel>0) printf("\n\n%d comment(s) to close\n",clevel);
  29.          /* EOF */}
  30.  
  31.  
  32. DEFINE
  33.  
  34. digi   = {0-9}.
  35. letter = {a-z A-Z}.
  36.  
  37.  
  38. START comment
  39.  
  40.  
  41. RULES
  42.  
  43. /* (verschachtelte) Comments ueberlesen */
  44.  
  45.           "(*"             : {printf("\ncomment level%d:\n",clevel++);
  46.                               if (yyStartState!=comment) yyStart (comment);}
  47. #comment# "*)"             : {printf("\nend of comment level %d\n",--clevel); if (clevel==0) yyPrevious;}
  48. #comment# ANY              : {yyEcho;}
  49.  
  50. /* String erkennen und uebergeben */
  51.  
  52. #STD#     \" - {\n"} * \"  : {length = GetWord (Word);
  53.                               Attribute.lexstring = PutString (Word,length);
  54.                               return 1;}
  55.  
  56. #STD#     \' - {\n'} * \'  : {length = GetWord (Word);
  57.                               Attribute.lexstring = PutString (Word,length);
  58.                               return 1;}
  59.  
  60. /* Zahlen erkennen und uebergeben */
  61.  
  62. #STD#     digi+            : {length = GetWord(Word);
  63.                                Attribute.lexstring = PutString (Word,length);
  64.                               return 2;}
  65.  
  66. /* Befehle */
  67.  
  68. #STD#     "BEGIN"          : {return 3;}
  69. #STD#     "END"            : {return 4;}
  70. #STD#     "CONST"          : {return 5;}
  71. #STD#     "VAR"            : {return 6;}
  72. #STD#     "PROCEDURE"      : {return 7;}
  73. #STD#     "TYPE"           : {return 8;}
  74. #STD#     "ARRAY"          : {return 9;}
  75. #STD#     "OF"             : {return 10;}
  76. #STD#     "IF"             : {return 11;}
  77. #STD#     "THEN"           : {return 12;}
  78. #STD#     "ELSIF"          : {return 13;}
  79. #STD#     "ELSE"           : {return 14;}
  80. #STD#     "WHILE"          : {return 15;}
  81. #STD#     "DO"             : {return 16;}
  82. #STD#     "OR"             : {return 17;}
  83. #STD#     "AND"            : {return 18;}
  84. #STD#     "NOT"            : {return 19;}
  85. #STD#     "ODD"            : {return 20;}
  86. #STD#     "?"              : {return 21;}
  87. #STD#     "!"              : {return 22;}
  88.  
  89. /* Operatoren */
  90.  
  91. #STD#     "="              : {return 23;}
  92. #STD#     "#"              : {return 24;}
  93. #STD#     "<"              : {return 25;}
  94. #STD#     ">"              : {return 26;}
  95. #STD#     "<="             : {return 27;}
  96. #STD#     ">="             : {return 28;}
  97. #STD#     "+"              : {return 29;}
  98. #STD#     "-"              : {return 30;}
  99. #STD#     "*"              : {return 31;}
  100. #STD#     "/"              : {return 32;}
  101. #STD#     ":="             : {return 33;}
  102.  
  103. /* Delimiter */
  104.  
  105. #STD#     ","              : {return 34;}
  106. #STD#     ";"              : {return 35;}
  107. #STD#     "."              : {return 36;}
  108. #STD#     "("              : {return 37;}
  109. #STD#     ")"              : {return 38;}
  110. #STD#     "["              : {return 39;}
  111. #STD#     "]"              : {return 40;}
  112. #STD#     ":"              : {return 41;}
  113.  
  114. /* Identifier */
  115.  
  116. #STD#     letter {a-z A-Z 0-9} * : {Attribute.lexid = MakeIdent (TokenPtr, TokenLength);
  117.                                        return 42;}
  118.  
  119. /* Ueberlesen */
  120.  
  121. /* #STD#     \n               : {} */
  122. /* #STD#     {\t " "} *       : {} */
  123.